Skip to main content

负载均衡与限流策略

在构建高性能、高可用系统中,负载均衡与限流是关键组件,常用于流量分发、故障隔离、服务保护。


⚖️ 负载均衡简介

负载均衡用于将客户端请求合理分发到多个服务实例,提高系统吞吐能力与可用性。

✅ 常见策略

策略描述适用场景
轮询(Round Robin)顺序分发服务器性能相近
最少连接最空闲节点优先请求耗时不一致
IP 哈希相同 IP 分配同节点会话保持
权重分配节点按权重接收请求异构集群

🔁 Nginx 负载均衡示例

upstream backend {
server backend1.example.com weight=3;
server backend2.example.com weight=2;
}

server {
listen 80;
location / {
proxy_pass http://backend;
}
}

🚧 限流策略介绍

限流用于防止接口被频繁请求导致宕机,保护服务稳定运行。

✅ 常见算法

算法描述特点
固定窗口每窗口周期限 N 次简单实现
滑动窗口精准统计多个小时间片精度高
令牌桶每次请求需获取令牌应对突发好
漏桶固定速率处理稳定输出速率

🧪 使用场景举例

场景策略
API 网关防刷IP + 固定窗口
高价值接口保护JWT 用户限流
内网接口保护令牌桶限流
微服务间调用限 QPS 和并发

🧑‍💻 代码与配置示例

✅ Nginx 限流配置

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

server {
location /api/ {
limit_req zone=one burst=20 nodelay;
proxy_pass http://backend;
}
}

✅ Node.js Express 限流中间件

const rateLimit = require("express-rate-limit");

const limiter = rateLimit({
windowMs: 60 * 1000, // 每分钟
max: 100 // 限制每个 IP 最多 100 次请求
});

app.use("/api/", limiter);

✅ Spring Cloud Gateway 限流(基于 Redis)

spring:
cloud:
gateway:
routes:
- id: limit_route
uri: http://localhost:8081
predicates:
- Path=/api/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 5
redis-rate-limiter.burstCapacity: 10

🧠 常见问题与实践

❓ 限流失败提示用户什么?

返回状态码 429 Too Many Requests,并提示稍后重试。

❓ 每个接口限流策略应相同吗?

建议分级策略,例如登录接口更严、查询接口更宽。

❓ 限流是否能防御 DDoS?

可作为第一道防线,应配合防火墙和 WAF 使用。


📚 推荐资源